﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using System.Linq;
using DevExpress.XtraEditors.Controls;

namespace ThuPhiVeSinh
{
    public partial class frmKhuVuc : DevExpress.XtraEditors.XtraForm
    {
        DataClasses_TPVSDataContext dc = new DataClasses_TPVSDataContext();
        Boolean saved = true;
        DialogResult result;

        public frmKhuVuc()
        {
            InitializeComponent();
        }

        private void frmKhuVuc_Load(object sender, EventArgs e)
        {
            var kv = dc.GetTable<Khu_Vuc>();
            gcKhuVuc.DataSource = kv;

            //var px = dc.GetTable<Phuong_Xa>();
            var PhuongXa = from px in dc.Phuong_Xas select new { px.PX_ID, px.PX_Ma, PX_Ten = px.PX_Ten + " - " + px.Quan_Huyen.QH_Ten };
            cbbPhuongXa.DataSource = PhuongXa;
            cbbPhuongXa.DisplayMember = "PX_Ten";
            cbbPhuongXa.ValueMember = "PX_ID";
        }

        private void btLuu_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            try
            {
                gvKhuVuc.MoveLast();
                gvKhuVuc.MoveFirst();
                dc.SubmitChanges();
                //XtraMessageBox.Show("Đã lưu!", "Lưu", MessageBoxButtons.OK, MessageBoxIcon.Information);
                saved = true;
                this.Text = this.Text.Substring(0, this.Text.Length - 1);

            }
            catch (Exception ex)
            {
                if (ex.Message.Contains("Cannot insert duplicate key in object"))
	            {
                    saved = true;
                    XtraMessageBox.Show("Có lỗi trong quá trình lưu dữ liệu.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    this.Close();
	            }
                else
                {
                    throw;
                }
                
            }
        }

        
        private void btXoa_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            if (gvKhuVuc.RowCount == 0)
            {
                XtraMessageBox.Show("Không có dữ liệu để xóa.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                result = XtraMessageBox.Show("Bạn có chắc muốn xóa?", "Xác nhận", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk);
                if (result == DialogResult.Yes)
                {
                    int rowHandles = gvKhuVuc.FocusedRowHandle;

                    Khu_Vuc kv = (Khu_Vuc)gvKhuVuc.GetRow(rowHandles);
                    if (kv.Khach_Hangs.Count > 0)
                    {
                        XtraMessageBox.Show("Không thể xóa!\nDữ liệu đang được sử dụng.", "Lỗi!", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                    }
                    else
                    {
                        //dc.Quan_Huyens.DeleteOnSubmit(qh);
                        gvKhuVuc.DeleteRow(rowHandles);
                        saved = false;
                        if (this.Text.Substring(this.Text.Length - 1, 1) != "*")
                        {
                            this.Text = this.Text + "*";
                        }
                    }
                        
                }
            }
        }

        private void frmKhuVuc_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (saved == false)
            {
                result = XtraMessageBox.Show("Dữ liệu chưa được lưu!\nBạn có muốn lưu không?", "Khu vực", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);

                if (result == System.Windows.Forms.DialogResult.Yes)
                {
                    dc.SubmitChanges();
                }
                else if (result == System.Windows.Forms.DialogResult.Cancel)
                {
                    e.Cancel = true;
                }
            }
        }

        private void gvKhuVuc_RowUpdated(object sender, DevExpress.XtraGrid.Views.Base.RowObjectEventArgs e)
        {
            saved = false;
            if (this.Text.Substring(this.Text.Length - 1, 1) != "*")
            {
                this.Text = this.Text + "*";
            }
        }

        private void gvKhuVuc_ValidatingEditor(object sender, DevExpress.XtraEditors.Controls.BaseContainerValidateEditorEventArgs e)
        {
            //Mã khu vực
            #region
            if (gvKhuVuc.FocusedColumn == colKV_Ma)
            {
                string NewValue = (string)e.Value;
                if (NewValue != null)
                {
                    if (NewValue.Trim() == "")
                    {
                        e.Valid = false;
                        e.ErrorText = "Mã khu vực không được để trống.";

                    }
                    else
                    {
                        NewValue = NewValue.Trim();
                        if (NewValue.Length != 2)
                        {
                            e.Valid = false;
                            e.ErrorText = "Mã khu vực phải có độ dài là 2 ký tự.";

                        }
                        else
                        {
                            for (int i = 0; i < gvKhuVuc.RowCount; i++)
                            {
                                string OldValue = (string)gvKhuVuc.GetRowCellValue(i, colKV_Ma);
                                int[] rowHandle = gvKhuVuc.GetSelectedRows();
                                if (OldValue.ToUpper().Trim() == NewValue.ToUpper() && i != rowHandle[0])
                                {
                                    e.Valid = false;
                                    e.ErrorText = "Mã khu vực này đã tồn tại.";

                                    break;
                                }
                            }
                        }
                    }
                }
                
            }
            #endregion

            //Tên khu vực
            #region
            if (gvKhuVuc.FocusedColumn == colKV_Ten)
            {
                string NewValue = (string)e.Value;
                if (NewValue != null)
                {
                    if (NewValue.Trim() == "")
                    {
                        e.Valid = false;
                        e.ErrorText = "Tên khu vực không được để trống.";

                    }
                    //else
                    //{
                    //    for (int i = 0; i < gvKhuVuc.RowCount; i++)
                    //    {
                    //        string OldValue = (string)gvKhuVuc.GetRowCellValue(i, colKV_Ten);
                    //        int[] rowHandle = gvKhuVuc.GetSelectedRows();
                    //        if (OldValue.ToUpper().Trim() == NewValue.ToUpper().Trim() && i != rowHandle[0])
                    //        {
                    //            e.Valid = false;
                    //            e.ErrorText = "Tên khu vực này đã tồn tại.";
                    //            break;
                    //        }
                    //    }
                    //}
                }
            }
            #endregion
        }

        private void gvKhuVuc_InvalidValueException(object sender, DevExpress.XtraEditors.Controls.InvalidValueExceptionEventArgs e)
        {
            e.ExceptionMode = DevExpress.XtraEditors.Controls.ExceptionMode.DisplayError;
        }

        private void gvKhuVuc_ValidateRow(object sender, DevExpress.XtraGrid.Views.Base.ValidateRowEventArgs e)
        {
            try
            {
                string KV_Ma = (string)gvKhuVuc.GetRowCellValue(e.RowHandle, colKV_Ma);
                if (KV_Ma == null)
                {
                    e.Valid = false;
                    gvKhuVuc.SetColumnError(colKV_Ma, "Mã khu vực không được để trống.");
                }

                string KV_Ten = (string)gvKhuVuc.GetRowCellValue(e.RowHandle, colKV_Ten);
                if (KV_Ten == null)
                {
                    e.Valid = false;
                    gvKhuVuc.SetColumnError(colKV_Ten, "Tên khu vực không được để trống.");
                }

                int PhuongXa = (int)gvKhuVuc.GetRowCellValue(e.RowHandle, colKV_PID);
                if (PhuongXa == 0)
                {
                    e.Valid = false;
                    gvKhuVuc.SetColumnError(colKV_PID, "Vui lòng chọn phường xã.");
                }

            }
            catch (Exception)
            {
                throw;
            }
        }

        private void gvKhuVuc_InvalidRowException(object sender, DevExpress.XtraGrid.Views.Base.InvalidRowExceptionEventArgs e)
        {
            e.ExceptionMode = ExceptionMode.NoAction;
        }

        private void btDong_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            this.Close();
        }

        private void gvKhuVuc_DragObjectDrop(object sender, DevExpress.XtraGrid.Views.Base.DragObjectDropEventArgs e)
        {
            if (gvKhuVuc.GroupCount > 0)
            {
                gvKhuVuc.OptionsBehavior.Editable = false;
            }
            else
            {
                gvKhuVuc.OptionsBehavior.Editable = true;
            }
        }

        private void gvKhuVuc_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e)
        {
            if (e.Column == colSTT)
            {
                if (e.RowHandle >= 0)
                {
                    e.DisplayText = (e.RowHandle + 1).ToString();
                }
            }
        }








    }
}